#pragma once
/********************************************************************
//	Created:	    2017/4/20   10:10
//	Filename: 	/NetEngine_Linux/NetEngine_SourceCode/NetEngine_NetHelp/NetEngine_MQXService/MQXService_Define.h
//	File Path:	/NetEngine_Linux/NetEngine_SourceCode/NetEngine_NetHelp/NetEngine_MQXService/
//	File Base:	MQXService_Define
//	File Ext:	    h
//  Project:     NetEngine_Linux(网络通信引擎)
//	Author:		Dowflyon
//	Purpose:	    消息队列导出定义
//	History:
*********************************************************************/
//////////////////////////////////////////////////////////////////////////
//                       导出的函数
//////////////////////////////////////////////////////////////////////////
extern "C" DWORD XMQService_GetLastError(int *pInt_SysError = NULL);
/*************************************************************************
                        消息队列包管理导出函数
**************************************************************************/
/************************************************************************
函数名称：XMQService_Packet_Init
函数功能：初始化消息队列包管理工具
  参数.一：nMaxPacket
   In/Out：In
   类型：整数型
   可空：Y
   意思：最大允许消息队列保存个数
返回值
  类型：逻辑型
  意思：是否初始化成功
备注：
************************************************************************/
extern "C" BOOL XMQService_Packet_Init(int nMaxPacket = 10000);
/************************************************************************
函数名称：XMQService_Packet_Destory
函数功能：销毁消息队列包管理工具
返回值
  类型：逻辑型
  意思：是否销毁成功
备注：
************************************************************************/
extern "C" BOOL XMQService_Packet_Destory();
/************************************************************************
函数名称：XMQService_Packet_Post
函数功能：投递一个数据包到消息队列中
  参数.一：pSt_ProtocolHdr
   In/Out：In
   类型：数据结构指针
   可空：N
   意思：输入协议头数据
  参数.二：lpszMsgBuffer
   In/Out：In
   类型：常量字符指针
   可空：N
   意思：要投递的BUFF缓冲区
返回值
  类型：逻辑型
  意思：是否投递成功
备注：
************************************************************************/
extern "C" BOOL XMQService_Packet_Post(NETENGINE_PROTOCOLHDR *pSt_ProtocolHdr,LPCTSTR lpszMsgBuffer);
/************************************************************************
函数名称：XMQService_Packet_Get
函数功能：从一个消息队列中获取一个包
  参数.一：pSt_ProtocolHdr
   In/Out：In
   类型：数据结构指针
   可空：N
   意思：数据协议头
  参数.二：lpszMsgBuffer
   In/Out：In
   类型：常量字符指针
   可空：N
   意思：输入后续数据长度
  参数.三：ptszMsgBuffer
   In/Out：Out
   类型：字符指针
   可空：N
   意思：导出获取到的数据
  参数.四：pInt_Len
   In/Out：In/Out
   类型：整数型指针
   可空：N
   意思：输入，获取数据缓冲区大小，输出真实获取到的大小
返回值
  类型：逻辑型
  意思：是否获取成功
备注：
************************************************************************/
extern "C" BOOL XMQService_Packet_Get(NETENGINE_PROTOCOLHDR *pSt_ProtocolHdr,LPCTSTR lpszMsgBuffer,TCHAR *ptszMsgBuffer,int *pInt_Len);
/************************************************************************
函数名称：XMQService_Packet_Del
函数功能：从一个队列中删除一个包
  参数.一：pSt_ProtocolHdr
   In/Out：In
   类型：数据结构指针
   可空：N
   意思：要删除的数据协议头信息
  参数.二：lpszMsgBuffer
   In/Out：In
   类型：常量字符指针
   可空：N
   意思：附加删除协议数据
返回值
  类型：逻辑型
  意思：是否删除成功
备注：
************************************************************************/
extern "C" BOOL XMQService_Packet_Del(NETENGINE_PROTOCOLHDR *pSt_ProtocolHdr,LPCTSTR lpszMsgBuffer);
/*************************************************************************
                        协议处理管理导出函数
**************************************************************************/
/********************************************************************
函数名称：XMQService_Protocol_HasPacket
函数功能：有消息在消息队列里面的封装函数
 参数.一：ptszMsgBuffer
  In/Out：Out
  类型：字符指针
  可空：N
  意思：导出封装好的数据包
 参数.二：pInt_Len
  In/Out：Out
  类型：整数型指针
  可空：N
  意思：导出数据包大小
 参数.三：unOperatorCode
  In/Out：In
  类型：整数型
  可空：N
  意思：输入要返回的协议CODE值
 参数.四：wResult
  In/Out：In
  类型：整数型
  可空：Y
  意思：输入操作结果,0代表成功
 参数.五：lpszMsgBuffer
  In/Out：In
  类型：常量字符指针
  可空：Y
  意思：输入要打包的后续数据,如果没有后续数据,那么这个值为NULL
 参数.六：nMsgLen
  In/Out：In
  类型：整数型
  可空：Y
  意思：输入后续数据大小
返回值
  类型：逻辑型
  意思：是否成功
备注：
*********************************************************************/
extern "C" BOOL XMQService_Protocol_Packet(TCHAR *ptszMsgBuffer, int *pInt_Len, UINT unOperatorCode, WORD wResult = 0, LPCTSTR lpszMsgBuffer = NULL, int nMsgLen = 0);
/********************************************************************
函数名称：XMQService_Protocol_PostPacket
函数功能：封装投递消息队列协议包
 参数.一：ptszMsgBuffer
  In/Out：Out
  类型：字符指针
  可空：N
  意思：导出封装号的协议
 参数.二：pInt_Len
  In/Out：Out
  类型：整数型指针
  可空：N
  意思：导出封装的协议的长度
 参数.三：pSt_XMQProtocol
  In/Out：In
  类型：数据结构指针
  可空：N
  意思：输入要投递的参数信息
 参数.四：lpszMsgBuffer
  In/Out：In
  类型：常量字符指针
  可空：Y
  意思：要封装的数据
 参数.五：nMsgLen
  In/Out：In
  类型：整数型
  可空：Y
  意思：要封装数据的长度
 参数.六：nPkgSerial
  In/Out：In
  类型：整数型
  可空：Y
  意思：投递包的序列号，0不启用，最大为65535，如果你设置了 KeepTime = -1 那么这个序列号不能重复使用
 参数.七：bIsReply
  In/Out：In
  类型：逻辑型
  可空：Y
  意思：是否需要回复包，投递成功与否都会返回一个协议头
返回值
  类型：逻辑型
  意思：是否成功
备注：
*********************************************************************/
extern "C" BOOL XMQService_Protocol_PostPacket(TCHAR *ptszMsgBuffer, int *pInt_Len, NETENGINE_PROTOCOL_XMQ *pSt_XMQProtocol, LPCTSTR lpszMsgBuffer = NULL, int nMsgLen = 0, int nPkgSerial = 0, BOOL bIsReply = TRUE);
/********************************************************************
函数名称：XMQService_Protocol_GetPacket
函数功能：封装获取消息队列协议包
 参数.一：ptszMsgBuffer
  In/Out：Out
  类型：字符指针
  可空：N
  意思：导出封装号的协议
 参数.二：pInt_Len
  In/Out：Out
  类型：整数型指针
  可空：N
  意思：导出封装的协议的长度
 参数.三：nPkgSerial
  In/Out：In
  类型：整数型
  可空：Y
  意思：要获取哪个包的序列号
 参数.四：lpszKey
  In/Out：In
  类型：常量字符指针
  可空：N
  意思：唯一包识别码，如果有的话，和POST对应
返回值
  类型：逻辑型
  意思：是否成功
备注：
*********************************************************************/
extern "C" BOOL XMQService_Protocol_GetPacket(TCHAR *ptszMsgBuffer, int *pInt_Len, int nPkgSerial = 0, LPCTSTR lpszKey = NULL);
/********************************************************************
函数名称：XMQService_Protocol_DeletePacket
函数功能：封装一个删除数据包事件
 参数.一：ptszMsgBuffer
  In/Out：Out
  类型：字符指针
  可空：N
  意思：导出封装号的协议
 参数.二：pInt_Len
  In/Out：Out
  类型：整数型指针
  可空：N
  意思：导出封装的协议的长度
 参数.三：nIPPorotcol
  In/Out：In
  类型：整数型
  可空：Y
  意思：删除包的协议，TCP OR UDP OR COMM
 参数.四：nSerial
  In/Out：In
  类型：整数型
  可空：Y
  意思：要获取哪个包的序列号,0代表所有
 参数.五：lpszKey
  In/Out：In
  类型：常量字符指针
  可空：Y
  意思：唯一包识别码
返回值
  类型：逻辑型
  意思：是否成功
备注：
*********************************************************************/
extern "C" BOOL XMQService_Protocol_DeletePacket(TCHAR *ptszMsgBuffer, int *pInt_Len, int nIPPorotcol = 0, int nSerial = 0, LPCTSTR lpszKey = NULL);
